home *** CD-ROM | disk | FTP | other *** search
Wrap
10 ' LOAN ANALYZER Copyright (c) 1983 Zyncon Inc. 20 DIM F(6,3),P$(5),PARSET(5),PARERR(6),TABLE1(60,3), TABLE2(60,5):KEY OFF:RESTORE 30 DATA 9,34,10,13,38,6,15,39,5,17,42,1,19,34,10,11,34,10 75 FALSE=0: TRUE=1 80 FOR I=1 TO 6 : READ F(I,1),F(I,2),F(I,3): NEXT I 92 GOSUB 30200 95 FOR I=1 TO 10 : KEY I,"": NEXT I: KEY OFF:WIDTH 80 97 ON ERROR GOTO 40000 100 ON KEY(1) GOSUB 12000: ON KEY(2) GOSUB 13000: ON KEY(3) GOSUB 13050: ON KEY(4) GOSUB 13080:ON KEY(5) GOSUB 13140:ON KEY(6) GOSUB 13170:ON KEY(7) GOSUB 13200 160 KEY(1) OFF:KEY(2) OFF:KEY(3) OFF:KEY(4) OFF:KEY(5) OFF:KEY(6) OFF:KEY(7) OFF 1000 ' 1005 GOSUB 10000 1010 GOSUB 9000 1020 GOSUB 8000 1030 GOSUB 6000 1040 GOSUB 4000 1050 GOSUB 7000 1200 ' 1210 KEY(1) ON:KEY(2) ON: KEY(6) ON 1230 T$=INKEY$ 1235 LOCATE 19,75 : PRINT "W";: LOCATE 19,75: GOSUB 5240 1240 IF T$="" OR LEN(T$)=2 THEN 1230 1250 IF T$=CHR$(13) THEN KEY(1) OFF: KEY(2) OFF:LOCATE 22,1: PRINT SPC(79);:LOCATE 19,75: PRINT " ";:GOTO 1040 4000 ' 4005 SOUND 1046.5,1:PARLINE=1 4040 GOSUB 30140: GOSUB 5000 4050 IF F$="" THEN 4070 4060 P$(PARLINE)=F$: GOTO 4085 4070 LOCATE F(PARLINE,1),F(PARLINE,2):PRINT TEMP$; 4085 IF PARLINE=1 THEN GOSUB 9300 4090 PARLINE = PARLINE+1:SOUND 1046.5,1 4110 IF PARLINE=6 THEN RETURN 4120 GOTO 4040 5000 ' 5010 F$="":ROW= F(PARLINE,1) : BC= F(PARLINE,2): FL= F(PARLINE,3): FP= BC: 5040 LOCATE ROW,FP 5050 GOSUB 5240 5060 T$= INKEY$ 5070 IF T$="" OR LEN(T$)=2 THEN 5050 5080 IF ASC(T$)= 13 THEN 5220 5090 IF ASC(T$)=8 THEN 5160 5100 IF FP=BC+FL THEN 5040 5110 PRINT T$;: F$=F$+T$ 5130 IF FP=BC THEN PRINT SPC(FL-1); 5140 FP=FP+1:GOTO 5040 5160 IF FP=BC THEN 5040 5170 IF FP=BC+1 THEN F$="": PRINT " "; : FP=BC: GOTO 5040 5180 PRINT " ";:FP=FP-1 5200 F$= LEFT$(F$,FP-BC):GOTO 5040 5220 PRINT " "; 5230 RETURN 5235 REM ***** CURSOR GENERATION ***** 5240 Y= CSRLIN:X= POS(0):IF Y=YL AND X=XL THEN 5280 5270 C= SCREEN(Y,X): 5280 PRINT CHR$(C);:LOCATE Y,X:PRINT CHR$(95);:LOCATE Y,X:XL=X:YL=Y 5330 RETURN 6000 LOCATE 7,1 6005 PRINT STRING$(80,95):LOCATE F(1,1),1: PRINT "(1) Amount to Borrow: $ ";:LOCATE F(1,1),F(1,2): PRINT SPC(F(1,3));:LOCATE F(1,1),F(1,2) :PRINT USING "#######.##";VAL( P$(1)); 6025 LOCATE 11,9: PRINT "Final Balloon Payment: $ ";: PRINT USING "#######.##";FBALL; 6030 LOCATE F(2,1),1: PRINT "(2) Annual Interest Rate: ";:LOCATE F(2,1),F(2,2):PRINT SPC(F(2,3));: LOCATE F(2,1),F(2,2): PRINT USING "##.###";VAL(P$(2));: LOCATE F(2,1),46: PRINT "%"; 6050 LOCATE F(3,1),1: PRINT "(3) Duration of Borrowing: ";:LOCATE F(3,1),F(3,2): PRINT SPC(F(3,3));: LOCATE F(3,1),F(3,2):PRINT P$(3);: LOCATE F(3,1),46 : PRINT "YY,MM"; 6070 LOCATE F(4,1),13: PRINT "Payment Frequency: ";:LOCATE F(4,1),F(4,2):PRINT SPC(F(4,3));: LOCATE F(4,1),F(4,2): PRINT P$(4);: LOCATE F(4,1),46: PRINT "(Monthly, Quarterly, Yearly)"; 6082 LOCATE F(5,1),1: PRINT "(4) Payment per Period: $ ";: LOCATE F(5,1),F(5,2): PRINT SPC(F(5,3));: LOCATE F(5,1),F(5,2) :PRINT USING "#######.##";VAL(P$(5)); 6110 LOCATE 21,1:PRINT "Please fill in 3 of 4 key parameters above." 6125 LOCATE 24,1:PRINT "F1 to calculate, F2 to clear, F6 to quit."; 6130 RETURN 7000 REM CHECK PARAMETERS ROUTINE 7010 FOR I=1 TO 6 : PARERR(I)=0: NEXT I 7015 FOR I=1 TO 5:PARSET(I)=0 : NEXT I 7020 GOOD=TRUE:NUMPAR = 0 7040 A=VAL(P$(1)):IF A<= 0 OR A>9999999.99# THEN GOOD= FALSE: PARERR(1)=1 :GOTO 7072 7060 PARSET(1)=1:NUMPAR= NUMPAR+1 7072 FBALL=VAL(FBALL$) :IF FBALL<0 OR FBALL>9999999.99# THEN FBALL=0 7080 ANINT= VAL(P$(2)):IF ANINT<=0 OR ANINT>99.99901 THEN GOOD= FALSE : PARERR(2)=1: GOTO 7120 7100 PARSET(2)=1:NUMPAR= NUMPAR+1 7120 GOSUB 7800 7125 IF VAL(YY$)<>INT(VAL(YY$)) OR VAL(MM$)<> INT(VAL(MM$)) THEN GOOD=FALSE: PARERR(3)=1: GOTO 7160 7127 DUR= VAL(YY$)+ VAL(MM$)/12:IF DUR<=0 THEN GOOD= FALSE: PARERR(3)=1: GOTO 7160 7135 GOSUB 30050:PARSET(3)=1: NUMPAR= NUMPAR +1 7160 PFQ$= P$(4):IF ASC(PFQ$)>90 THEN PFQ$=CHR$(ASC(PFQ$)-32): P$(4)=PFQ$ 7170 IF PFQ$ <> "M" AND PFQ$ <> "Q" AND PFQ$ <> "Y" THEN PFQ$="M":P$(4)="M" 7180 IF PFQ$= "M" THEN PFQ= 12 :GOTO 7200 7190 IF PFQ$= "Q" THEN PFQ= 4 ELSE PFQ = 1 7200 PARSET(4)=1: NUMPAR= NUMPAR+1 7220 P= VAL (P$(5)) 7230 IF P<= 0 OR P>9999999.99# THEN GOOD= FALSE: PARERR(5)=1 : GOTO 7260 7240 PARSET(5)=1: NUMPAR=NUMPAR+1 7260 IF NUMPAR<4 THEN GOOD= FALSE: PARERR(6)=1 7300 IF GOOD= TRUE THEN ER$="PARAMETERS OK ": GOTO 7390 7310 ER$="ERROR(S) IN PARAMETERS ":TOTER = 0 7330 FOR I=1 TO 5: IF PARERR(I)=0 THEN 7370 7350 TOTER=TOTER+1:IF I=5 THEN ER$=ER$+"/"+STR$(I-1)+" ":ELSE ER$=ER$+"/"+STR$(I)+" " 7370 NEXT I 7380 IF TOTER=1 AND PARERR(4)<>1 THEN GOOD=TRUE: GOTO 7300 7390 LOCATE 22,1:PRINT SPC(79);:LOCATE 22,1: PRINT ER$; 7430 A=FNCN(A):DUR= FNCN(DUR):P=FNCN(P) 7470 IF GOOD= FALSE THEN 7700 7480 MISS=0 7490 FOR I=1 TO 5:IF PARSET(I)=0 THEN MISS=I : P$(I)="?":GOTO 7520 7510 NEXT I 7520 IF MISS<>3 THEN N= -INT(-DUR*PFQ) 7540 R=ANINT/PFQ/100 7700 GOSUB 6000:RETURN 7800 CMPO= INSTR(P$(3),","):IF CMPO=0 THEN YY$=P$(3) : MM$="": GOTO 7850 7820 IF CMPO=1 THEN YY$="": MM$= MID$(P$(3),2,LEN(P$(3))-1) : GOTO 7850 7825 YY$= MID$(P$(3),1,CMPO-1):IF CMPO= 4 THEN MM$="" : GOTO 7850 7840 MM$=MID$(P$(3),CMPO+1,LEN(P$(3))-CMPO) 7850 RETURN 8000 P$(1)=" 0.00":P$(2)=" 0.000":P$(3)="00,00":P$(4)="M":P$(5)=" 0.00": FBALL=0:RETURN 9000 KEY(1) OFF: KEY(2) OFF: LOCATE 5,1:PRINT "Installment Loan or Mortgage : (I/M)";:LOCATE 5,42 9040 TYPE$=INKEY$:GOSUB 5240 9050 IF TYPE$<>"I" AND TYPE$<>"M" AND TYPE$<>"i" AND TYPE$<>"m" THEN 9040 9055 IF TYPE$="i" THEN TYPE$="I" ELSE IF TYPE$="m" THEN TYPE$="M" 9060 PRINT TYPE$; 9140 RETURN 1020 9150 LOCATE 5,1:PRINT "Installment Loan or Mortgage : ";:LOCATE 5,42: PRINT TYPE$;" (I/M)";:RETURN 9300 PARLINE=6 : SOUND 1046.5,1 :GOSUB 30140:GOSUB 5000 9310 IF F$="" THEN 9330 9320 FBALL$=F$: GOTO 9350 9330 LOCATE F(PARLINE,1),F(PARLINE,2): PRINT TEMP$; 9350 PARLINE=1:RETURN 10000 CLS: LOCATE 2,18:PRINT "L O A N A N A L Y Z E R -- SPECIFICATION": LOCATE 3,18: PRINT STRING$(44,"=");: RETURN 11000 IF TYPE$= "M" THEN 11300 11120 ON MISS GOTO 11130,11160,11190,11500,11240 11130 A=FNIA(FBALL,N,P,R): A= FNCN(A): GOTO 11500 11160 R= FNIR(A,FBALL,N,P): ANINT=100*R*PFQ:GOTO 11500 11190 N= FNIN(A,FBALL,P,R): N=FNCN(N): DUR=N:DUR= N/PFQ : DUR= FNCN(DUR):GOSUB 30050:GOTO 11500 11240 P= FNIP(A,FBALL,N,R):P= FNCN(P):GOTO 11500 11300 ON MISS GOTO 11310,11340,11380,11500,11430 11310 A= FNMA(FBALL,N,P,R):A= FNCN(A):GOTO 11500 11340 GOSUB 30300:ANINT=100*R*PFQ:GOTO 11500 11380 N= FNMN(A,FBALL,P,R):N=FNCN(N):DUR=N:DUR=DUR/PFQ : DUR= FNCN(DUR):GOTO 11500 11430 P= FNMP(A,FBALL,N,R):P= FNCN(P) 11500 IF MISS=1 THEN P$(1) = STR$(A): P$(1)=MID$(P$(1),2,LEN(P$(1))-1) 11520 IF MISS=2 THEN P$(2)= STR$(ANINT): P$(2)=MID$(P$(2),2,LEN(P$(2))-1) 11530 IF MISS=3 THEN GOSUB 30050 11540 IF MISS=4 THEN P$(4)= PFQ$ 11550 IF MISS=5 THEN P$(5)= STR$(P): P$(5)= MID$(P$(5),2,LEN(P$(5))-1) 11560 PARSET(MISS)=1 11700 RETURN 12000 KEY(1) OFF:KEY(2) OFF:KEY(6) OFF:LOCATE 19,75 :PRINT " ";:IF GOOD=FALSE OR MISS=0 THEN RETURN 1200 12030 GOSUB 11000:GOSUB 6000:LOCATE 23,1:CONS=0 12060 PRINT "Detailed Payback Schedule (Y/N) ? "; 12070 GOSUB 5240:T$=INKEY$:IF T$="" GOTO 12070 12085 IF ASC(T$)>90 THEN T$=CHR$(ASC(T$)-32) 12090 IF T$<>"N" AND T$<>"Y" THEN 12070 ELSE PRINT T$; 12091 IF T$="N" THEN LOCATE 23,1:PRINT SPC(79);:RETURN 1200 12092 IF N/PFQ<=60 THEN 12098 12093 LOCATE 23,1:PRINT "Too many periods, ...hit a key "; 12095 T$=INKEY$:IF T$="" THEN 12095 12096 LOCATE 23,1:PRINT SPC(79);:RETURN 1200 12098 IF PFQ=1 THEN 12120 12099 IF N<=60 THEN 12120 12100 CONS=1 12120 IF TYPE$="M" THEN GOSUB 15400 ELSE GOSUB 19000 12125 IF TYPE$="I" THEN ERASE PTABLE1 ELSE ERASE PTABLE2 12130 CLS: GOSUB 10000: GOSUB 9150:GOSUB 6000:RETURN 1200 13000 KEY(1) OFF:KEY(2) OFF:KEY(6) OFF:LOCATE 19,75:PRINT " ";:GOSUB 10000:GOSUB 9000:RETURN 1030 13050 KEY(3) OFF:KEY(4) OFF:KEY(5) OFF:KEY(7) OFF:IF (I=TABLESIZE AND TYPE$="M") THEN RETURN 15630 ELSE IF I=TABLESIZE THEN RETURN 19152 13070 IF TYPE$="M" THEN RETURN 15640 ELSE RETURN 19160 13080 KEY(3) OFF:KEY(4) OFF:KEY(5) OFF:KEY(7) OFF:IF (I<=12 AND TYPE$="M") THEN RETURN 15630 ELSE IF I<=12 THEN RETURN 19152 13100 GOSUB 30000 13120 IF TYPE$ = "M" THEN RETURN 15640 ELSE RETURN 19160 13140 KEY(3) OFF:KEY(4) OFF:KEY(5) OFF:KEY(7) OFF:RETURN 12125 13170 KEY(1) OFF:KEY(2) OFF:KEY(6) OFF:CLS 13180 KEY 1,"LIST ":KEY 2,"RUN"+CHR$(13): KEY 3,"LOAD"+CHR$(34): KEY 4,"SAVE"+CHR$(34): KEY 5,"CONT"+CHR$(13): KEY 6,",LPT1:"+CHR$(34):KEY 7,"TRON"+CHR$(13): KEY 8,"TROFF"+CHR$(13): KEY 9,"KEY ": KEY 10,"SCREEN 0,0,0"+CHR$(13): KEY ON: 13190 SCREEN 0,0,0,0:WIDTH 80:RUN "menu" 13200 KEY(3) OFF:KEY(4) OFF:KEY(5) OFF:KEY(7) OFF:IF TYPE$="I" THEN GOSUB 25000:RETURN 19140 13230 GOSUB 26000 : RETURN 15615 14000 CLS: LOCATE 1,12: PRINT "L O A N A N A L Y Z E R -- MORTGAGE PAYBACK SCHEDULE";: LOCATE 2,12:PRINT STRING$(56,"=") 14510 LOCATE 4,16: PRINT "Amount: $ ";: PRINT USING "#######.##";A;:LOCATE 5,2 : PRINT "Final Balloon Payment: $ ";: PRINT USING "#######.##";FBALL; 14520 LOCATE 6,5 : PRINT "Payment per Period: $ ";: PRINT USING "#######.##";P;:LOCATE 4,44 : PRINT "Annual Interest Rate: ";: PRINT USING "##.###";ANINT;: LOCATE 4,74: PRINT "%"; 14530 LOCATE 5,43 : PRINT "Duration of Borrowing: ";P$(3);: LOCATE 5,74: PRINT "YY,MM";:LOCATE 6,47: PRINT "Payment Frequency: "; 14536 IF PFQ$="Y" THEN PRINT "Yearly"; : GOTO 14600 14537 IF PFQ$="Q" THEN PRINT "Quarterly";: GOTO 14600 14538 PRINT "Monthly"; 14600 LOCATE 8,8 14700 PRINT " | Current | Current | Cumul. | Cumul. | Unpaid" 14800 REM 14810 IF PFQ$="Y" OR CONS=1 THEN PD$="Year ": GOTO 14840 14820 IF PFQ$="Q" THEN PD$="Quarter ": GOTO 14840 14830 PD$="Month " 14840 LOCATE 9,3 : PRINT PD$; 14890 LOCATE 9,11 14900 PRINT "| Principal | Interest | Principal | Interest | Principal" 15000 LOCATE 10, 3: PRINT STRING$(76,"_"):RETURN 15400 GOSUB 14000: GOSUB 17000:IF CONS=1 THEN LOCATE 7,21: PRINT "Periods represent annual consolidation"; 15450 FOR I= 1 TO TABLESIZE 15480 LOCATE 11+(I-1) MOD 12,5: PRINT I;: LOCATE 11+(I-1) MOD 12,11: PRINT "|"; 15500 LOCATE 11+(I-1) MOD 12,13: IF I= TABLESIZE THEN TABLE2(I,1)=A-FBALL-TABLE2(I-1,3) 15510 PRINT USING "#######.##";TABLE2(I,1);:LOCATE 11+ (I-1) MOD 12,25: PRINT "|";:LOCATE 11+(I-1) MOD 12,27 15525 IF I=TABLESIZE THEN TABLE2(I,2)=N*P-A+FBALL-TABLE2(I-1,4) 15530 PRINT USING "#######.##";TABLE2(I,2);:LOCATE 11+(I-1) MOD 12,39: PRINT "|";:LOCATE 11+(I-1) MOD 12 ,41 15565 IF I=TABLESIZE THEN TABLE2(I,3)=A-FBALL 15570 PRINT USING "#######.##"; TABLE2(I,3);:LOCATE 11+(I-1) MOD 12,53: PRINT "|";: LOCATE 11+(I-1) MOD 12,55:IF I=TABLESIZE THEN TABLE2(I,4)=TABLE2(I-1,4)+TABLE2(I,2) 15575 PRINT USING "#######.##";TABLE2(I,4); 15601 LOCATE 11+(I-1) MOD 12,67: PRINT "|"; 15602 LOCATE 11+(I-1) MOD 12,69 15603 IF I=TABLESIZE THEN PRINT USING "#######.##";FBALL;:GOTO 15610 15605 PRINT USING "#######.##";TABLE2(I,5); 15610 IF I/12<>INT(I/12) THEN 15676 15615 LOCATE 23,1: PRINT "F3 - next 12 periods. F4 - previous 12 periods. PrtSc - print. F5 - return.": PRINT "F7 - detail report."; 15630 KEY(3) ON:KEY(4) ON:KEY(5) ON:KEY(7) ON 15632 FOR K=1 TO 20: NEXT K: GOTO 15632 15640 FOR K=11 TO 22: LOCATE K,1:PRINT SPC(79);:NEXT K 15676 IF I=TABLESIZE THEN 15615 15700 NEXT I 16000 DIM PTABLE1(N+1,3): CUMPRIN=0:CUMINT=0: N1=N: LIM=N/PFQ: A1=A: T= N*(N+1)/2: LIN=0 16075 IF N/T*(N*P-A) >P THEN LIN=1 16080 FOR J= 1 TO N1 16090 IF LIN=0 THEN CURINT=(N*P-A+FBALL)*(N+1-J)/T ELSE CURINT=(N*P-A+FBALL)/N 16120 CURPRIN=P-CURINT:CUMPRIN=CUMPRIN+CURPRIN:CUMINT=CUMINT+CURINT:CURPRIN=FNCN(CURPRIN):CURINT=FNCN(CURINT):CUMPRIN=FNCN(CUMPRIN):CUMINT=FNCN(CUMINT):PAYOFF=A+FBALL-CUMPRIN:PAYOFF=FNCN(PAYOFF) 16265 IF CONS<>1 THEN 16400 16270 IF J/PFQ<>INT(J/PFQ) AND J/PFQ<LIM THEN 16450 16275 TABLE1(J/PFQ,1)=CUMPRIN: TABLE1(J/PFQ,2)=CUMINT:TABLE1(J/PFQ,3)=PAYOFF:GOTO 16450 16400 TABLE1(J,1)= CUMPRIN:TABLE1(J,2)= CUMINT: TABLE1(J,3)= PAYOFF 16450 PTABLE1(J,1)= CUMPRIN :PTABLE1(J,2)= CUMINT: PTABLE1(J,3)= PAYOFF 16500 NEXT J 16520 IF CONS=0 THEN TABLESIZE=N: GOTO 16535 16530 IF LIM<>INT(LIM) THEN TABLESIZE=INT(LIM+1) ELSE TABLESIZE=LIM 16535 IF TABLESIZE<>INT(TABLESIZE) THEN TABLESIZE=INT(TABLESIZE+1) 16540 PTABLESIZE=N 16545 IF PTABLESIZE<>INT(PTABLESIZE) THEN PTABLESIZE=INT(PTABLESIZE+1) 16700 RETURN 17000 DIM PTABLE2(N+1,5): CUMPRIN= 0: CUMINT= 0: A1=A:N1=N : LIM =N/PFQ: T=0 17030 FOR J= 1 TO N 17050 CURINT=A1*R: CURPRIN= P- CURINT:CUMPRIN=CUMPRIN+ CURPRIN: CUMINT=CUMINT+CURINT: A1=A1-CURPRIN: CURPRIN= FNCN(CURPRIN): CURINT=FNCN(CURINT):CUMPRIN=FNCN(CUMPRIN): CUMINT=FNCN(CUMINT) 17210 IF CONS<>1 THEN 17300 17220 IF J/PFQ<>INT(J/PFQ) AND J/PFQ<LIM THEN 17350 17222 T=T+1: TABLE2(J/PFQ,1)=CUMPRIN- TABLE2(T-1,3):TABLE2(J/PFQ,2)=CUMINT-TABLE2(T-1,4): TABLE2(J/PFQ,3)=CUMPRIN: TABLE2(J/PFQ,4)=CUMINT:TABLE2(J/PFQ,5)= A- CUMPRIN: GOTO 17350 17300 TABLE2(J,1)= CURPRIN: TABLE2(J,2)= CURINT:TABLE2(J,3)= CUMPRIN:TABLE2(J,4)= CUMINT: TABLE2(J,5)=A- CUMPRIN 17350 PTABLE2(J,1)=CURPRIN: PTABLE2(J,2)=CURINT: PTABLE2(J,3)= CUMPRIN:PTABLE2(J,4)= CUMINT: PTABLE2(J,5)=A- CUMPRIN 17500 NEXT J 17510 IF CONS=0 THEN TABLESIZE=N: GOTO 17525 17520 IF LIM<>INT(LIM) THEN TABLESIZE=INT(LIM+1) ELSE TABLESIZE=LIM 17525 IF TABLESIZE<>INT(TABLESIZE) THEN TABLESIZE=INT(TABLESIZE+1) 17530 PTABLESIZE=N 17540 IF PTABLESIZE<>INT(PTABLESIZE) THEN PTABLESIZE=INT(PTABLESIZE+1) 17600 RETURN 18000 CLS: LOCATE 1,9:PRINT "L O A N A N A L Y Z E R -- INSTALLMENT LOAN PAYBACK SCHEDULE";:LOCATE 2,9:PRINT STRING$(64,"="); 18060 LOCATE 4,17 : PRINT "Amount: $ ";: PRINT USING "#######.##";A;:LOCATE 5,2 : PRINT "Final Balloon Payment: $ ";: PRINT USING "#######.##";FBALL; 18080 LOCATE 6,5 : PRINT "Payment per Period: $ ";: PRINT USING "#######.##";P;:LOCATE 4,45: PRINT "Annual Interest Rate: ";:PRINT USING "##.###";ANINT;: LOCATE 4,74 : PRINT "%"; 18100 LOCATE 5,44 : PRINT "Duration of Borrowing: ";P$(3);: LOCATE 5,74: PRINT "YY,MM";: LOCATE 6,48: PRINT "Payment Frequency: "; 18111 IF PFQ$="Y" THEN PRINT "Yearly";: GOTO 18120 18112 IF PFQ$="Q" THEN PRINT "Quarterly";: GOTO 18120 18113 PRINT "Monthly"; 18120 LOCATE 8,17 18130 PRINT " | Cumul. | Cumul. | Pay-Off "; 18131 IF PFQ$="Y" OR CONS=1 THEN PD$="Year ": GOTO 18137 18132 IF PFQ$="Q" THEN PD$="Quarter ": GOTO 18137 18133 PD$="Month " 18137 LOCATE 9,12 18138 PRINT PD$; 18140 LOCATE 9,20 18150 PRINT "| Principal | Interest | Amount ";: LOCATE 10,11 18170 PRINT "--------------------------------------------------";: RETURN 19000 GOSUB 18000: GOSUB 16000 19027 IF CONS=1 THEN LOCATE 7,20: PRINT "Periods represent annual consolidation"; 19028 IF LIN=1 THEN LOCATE 7,60: PRINT " ( Linear Decline )"; 19030 FOR I=1 TO TABLESIZE 19040 LOCATE 11+(I-1) MOD 12,13: PRINT I;: LOCATE 11+(I-1) MOD 12,20 : PRINT "|"; 19060 LOCATE 11+(I-1) MOD 12,22: IF I=TABLESIZE THEN TABLE1(I,1)=A-FBALL 19070 PRINT USING "#######.##";TABLE1(I,1); 19080 LOCATE 11+(I-1) MOD 12,34 : PRINT "|";: LOCATE 11+(I-1) MOD 12,36 19095 IF I=TABLESIZE THEN TABLE1(I,2)=P*N-A+FBALL 19100 PRINT USING "#######.##";TABLE1(I,2);: LOCATE 11+(I-1) MOD 12,48 : PRINT "|"; 19120 LOCATE 11+(I-1) MOD 12,50:IF I=TABLESIZE THEN PRINT USING "#######.##";FBALL:GOTO 19135 19130 PRINT USING "#######.##";TABLE1(I,3); 19135 IF I/12<>INT(I/12) THEN 19195 19140 LOCATE 23,1:PRINT "F3 - next 12 periods. F4 - previous 12 periods. PrtSc - print. F5 - return.":PRINT "F7 - detail report."; 19152 KEY(3) ON:KEY(4) ON:KEY(5) ON:KEY(7) ON 19153 FOR K=1 TO 20: NEXT K: GOTO 19153 19160 FOR K=11 TO 22: LOCATE K,1: PRINT SPC(79);: NEXT K 19195 IF I=TABLESIZE THEN 19140 19700 NEXT I 20000 LPRINT CHR$(12);:LPRINT " L O A N A N A L Y Z E R -- INSTALLMENT LOAN PAYBACK SCHEDULE" 20030 LPRINT " ";STRING$(64,"="): LPRINT:LPRINT: RETURN 20060 LPRINT CHR$(12);: LPRINT SPC(12);"L O A N A N A L Y Z E R -- MORTGAGE PAYBACK SCHEDULE" 20080 LPRINT SPC(12);STRING$(56,"="):LPRINT:LPRINT:RETURN 20090 LPRINT SPC(17);"Amount: $ ";: LPRINT USING "#######.##";A; 20100 LPRINT SPC(9);"Annual Interest Rate: ";: LPRINT USING "##.###";ANINT;: LPRINT " %":LPRINT SPC(2);"Final Balloon Payment: $ ";: LPRINT USING "#######.##";FBALL; 20120 LPRINT SPC(8);"Duration of Borrowing: ";: LPRINT P$(3);" ";"YY,MM":LPRINT SPC(5);"Payment per Period: $ ";:LPRINT USING "#######.##";P;:LPRINT SPC(12);"Payment Frequency: "; 20141 IF PFQ$="Y" THEN LPRINT "Yearly": GOTO 20145 20142 IF PFQ$="Q" THEN LPRINT "Quarterly": GOTO 20145 20143 LPRINT "Monthly" 20145 IF TYPE$="I" AND LIN=1 THEN LPRINT SPC(33);"(Linear Decline)": GOTO 20160 20150 LPRINT 20160 LPRINT 20165 RETURN 20170 LPRINT SPC(22);" | Cumul. | Cumul. | Pay-Off " 20190 IF PFQ$="Y" THEN PD$="Year ": GOTO 20230 20200 IF PFQ$="Q" THEN PD$="Quarter ": GOTO 20230 20210 PD$="Month " 20230 LPRINT SPC(17);PD$; 20240 LPRINT "| Principal | Interest | Amount ":LPRINT SPC(16);STRING$(51,"_"): RETURN 20280 LPRINT SPC(7);" | Current | Current | Cumul. | Cumul. | Unpaid" 20290 IF PFQ$="Y" THEN PD$="Year ": GOTO 20320 20300 IF PFQ$="Q" THEN PD$="Quarter ": GOTO 20320 20310 PD$="Month " 20320 LPRINT SPC(2);PD$; 20330 LPRINT "| Principal | Interest | Principal | Interest | Principal" 20340 LPRINT SPC(2);STRING$(76,"_"): RETURN 25000 GOSUB 20000: GOSUB 20090: GOSUB 20170 25100 FOR K=1 TO PTABLESIZE 25110 LPRINT SPC(18);: LPRINT USING "####";K;: LPRINT SPC(3);"|";: LPRINT " "; 25140 IF K= PTABLESIZE THEN PTABLE1(K,1)=A-FBALL 25150 LPRINT USING "#######.##";PTABLE1(K,1);: LPRINT SPC(2);"|";:LPRINT " "; 25180 IF K=PTABLESIZE THEN PTABLE1(K,2)=P*N-A+FBALL 25190 LPRINT USING "#######.##";PTABLE1(K,2);:LPRINT SPC(2);"|";: LPRINT " "; 25220 IF K=PTABLESIZE THEN LPRINT USING "#######.##";FBALL:GOTO 25240 25230 LPRINT USING "#######.##";PTABLE1(K,3) 25240 IF K/48<>INT(K/48) THEN 25260 25245 IF K=N THEN 25260 25250 LPRINT CHR$(12); : LPRINT :LPRINT :LPRINT : GOSUB 20170 25260 NEXT K 25999 RETURN 26000 GOSUB 20060:GOSUB 20090:GOSUB 20280 26050 FOR K=1 TO PTABLESIZE 26060 LPRINT SPC(3);: LPRINT USING "####";K;:LPRINT SPC(3);: LPRINT "|";:LPRINT " "; 26110 IF K=PTABLESIZE THEN PTABLE2(K,1)=A-FBALL-PTABLE2(K-1,3) 26120 LPRINT USING "#######.##";PTABLE2(K,1);: LPRINT SPC(2);"|";:LPRINT " "; 26150 IF K=PTABLESIZE THEN PTABLE2(K,2)=N*P-A+FBALL-PTABLE2(K-1,4) 26160 LPRINT USING "#######.##";PTABLE2(K,2);: LPRINT SPC(2);"|";: LPRINT " "; 26190 IF K=PTABLESIZE THEN PTABLE2(K,3)=A-FBALL 26200 LPRINT USING "#######.##";PTABLE2(K,3);:LPRINT SPC(2);"|";:LPRINT " "; 26230 IF K=PTABLESIZE THEN PTABLE2(K,4)= PTABLE2(K-1,4)+ PTABLE2(K,2) 26240 LPRINT USING "#######.##";PTABLE2(K,4);:LPRINT SPC(2);"|"; 26255 IF K=PTABLESIZE THEN LPRINT USING "#######.##";FBALL:GOTO 26270 26260 LPRINT USING "#######.##";PTABLE2(K,5) 26270 IF K/48<>INT(K/48) THEN 26500 26275 IF K=N THEN 26500 26280 LPRINT CHR$(12): LPRINT : LPRINT :LPRINT :GOSUB 20280 26500 NEXT K 26999 RETURN 30000 IF I<=12 THEN RETURN 30020 IF I/12<> INT(I/12) THEN I= INT(I/12)*12-12: GOTO 30040 30030 I=I-24 30040 RETURN 30050 YY$=STR$(INT(DUR)): MM$=STR$(CINT((DUR-INT(DUR))*12)):YY$=MID$(YY$,2,LEN(YY$)): MM$=MID$(MM$,2,LEN(MM$)) 30100 IF LEN(YY$)<2 THEN YY$="0"+YY$ 30110 IF LEN(MM$)<2 THEN MM$="0"+MM$ 30120 P$(3)=YY$++"," +MM$ 30130 RETURN 30140 X=F(PARLINE,2): Y=F(PARLINE,1): FL=F(PARLINE,3): TEMP$="" 30160 FOR K=X TO X+FL-1 30170 TEMP$=TEMP$+CHR$(SCREEN(Y,K)) 30180 NEXT K 30190 RETURN 30200 DEF FNCN(X)=FIX(100*X+.5)/100 30210 DEF FNMAN(B,N,P,R) = P+ (B*R*(1+R)^N) / ((1+R)^N-1) -R*B: DEF FNMAD(B,N,P,R) = R*(1+R)^N / ((1+R)^N-1) : DEF FNMA(B,N,P,R)= FNMAN(B,N,P,R)/ FNMAD(B,N,P,R) 30260 REM NEWTON ROUTINE 30270 DEF FNF(S)=A*S^(N+1)-(A+P)*S^N-FBALL*S+FBALL+P: DEF FNG(S)=A*(N+1)*S^N-(A+P)*N*S^(N-1)-FBALL 30290 GOTO 30340 30300 S=1.1 30310 IF FNF(S)<=.01 THEN R= S-1 : RETURN 30320 S=S- FNF(S)/FNG(S) 30330 GOTO 30310 30340 DEF FNMN(A,B,P,R) = LOG( R*(A-B)/(P-R*B-R*(A-B)) +1)/ LOG (1+R): DEF FNMP(A,B,N,R) = (A-B)*R*(1+R)^N/ ((1+R)^N-1)+R*B 30390 DEF FNIA(B,N,P,R)= (P*N+B)/(1+R*N):DEF FNIR(A,B,N,P)= (P*N+B-A)/(N*A): DEF FNIN(A,B,P,R)= (A-B)/(P-R*A): DEF FNIP(A,B,N,R)= (A-B+R*N*A)/N 30430 RETURN 40000 IF ERR<>24 AND ERR<>25 AND ERR<>27 THEN STOP 40010 LOCATE 24,25: PRINT "Printer problem, please check , hit a key to re-try"; 40020 T$=INKEY$: IF T$="" THEN 40020 40030 LOCATE 24,25: P